package com.ruoyi.open.api;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.sign.Md5Utils;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;

import javax.servlet.http.HttpServletRequest;
import java.beans.PropertyEditorSupport;
import java.util.Date;

/**
 * 公开接口，主要是实现认证
 * 令牌算法：key@timestamp的md5
 */
public class OpenController{
    /**
     * 将前台传递过来的日期格式的字符串，自动转化为Date类型
     */
    @InitBinder
    public void initBinder(WebDataBinder binder)
    {
        // Date 类型转换
        binder.registerCustomEditor(Date.class, new PropertyEditorSupport()
        {
            @Override
            public void setAsText(String text)
            {
                setValue(DateUtils.parseDate(text));
            }
        });
    }

    /**
     * 设置请求分页数据
     */
    protected void startPage()
    {
        PageUtils.startPage();
    }

    /**
     * 返回成功
     */
    public AjaxResult success()
    {
        return AjaxResult.success();
    }

    /**
     * 返回失败消息
     */
    public AjaxResult error()
    {
        return AjaxResult.error();
    }

    /**
     * 返回成功消息
     */
    public AjaxResult success(Object data)
    {
        return AjaxResult.success(data);
    }

    /**
     * 验证停牌
     * @param request
     * @return
     */
    public boolean checkToken(HttpServletRequest request){
        String token = request.getHeader("x-token");
        String key = request.getHeader("x-key");
        String ts = request.getHeader("x-timestamp");
        if(System.currentTimeMillis() - Long.parseLong(ts) < 300 * 1000){
            throw new ServiceException("签名已过期");
        }

        String md5 = Md5Utils.hash(key + "@" + ts);
        return md5.equalsIgnoreCase(token);
    }


    /**
     * 获取整数参数
     * @param request
     * @param pn
     * @param dv
     * @return
     */
    public Integer getIntParam(HttpServletRequest request, String pn, Integer dv){
        String sv = request.getParameter(pn);
        if(StringUtils.isEmpty(sv)){
            return dv;
        }
        try{
            return Integer.parseInt(sv);
        }catch (Exception e){
            return dv;
        }
    }
}
